package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.entity.LimitRuleDO;
import com.cmc.cloud.cmclink.doc.vo.limitrulevo.LimitRuleCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.limitrulevo.LimitRulePageReqVO;
import com.cmc.cloud.cmclink.doc.vo.limitrulevo.LimitRuleRespVO;
import com.cmc.cloud.cmclink.doc.vo.limitrulevo.LimitRuleUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.rulematchitemcfg.RuleMatchItemCfgRespVO;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 禁接规则 Service 接口
 *
 * @author 招商轮船-管理员
 */
public interface LimitRuleService {

    /**
     * 创建禁接规则
     *
     * @param createReqVO 创建信息
     */
    void createLimitRule(@Valid LimitRuleCreateReqVO createReqVO);

    /**
     * 更新禁接规则
     *
     * @param updateReqVO 更新信息
     */
    void updateLimitRule(@Valid LimitRuleUpdateReqVO updateReqVO);

    /**
     * 删除禁接规则
     *
     * @param id 编号
     */
    void deleteLimitRule(Long id);

    /**
     * 获得禁接规则
     *
     * @param id 编号
     * @return 禁接规则
     */
    LimitRuleDO getLimitRule(Long id);

    /**
     * 获得禁接规则列表
     *
     * @param ids 编号
     * @return 禁接规则列表
     */
    List<LimitRuleDO> getLimitRuleList(Collection<Long> ids);

    /**
     * 获得禁接规则分页
     *
     * @param pageReqVO 分页查询
     * @return 禁接规则分页
     */
    PageResult<LimitRuleDO> getLimitRulePage(LimitRulePageReqVO pageReqVO);

    /**
     * 获得禁接规则
     *
     * @param reqVO     分页查询
     * @param usePeriod 适用阶段
     * @return 规则分页
     */
    List<LimitRuleRespVO> findLimitRule(LimitRulePageReqVO reqVO, String usePeriod);


    /**
     * 获得禁接规则 详细
     *
     * @param limitList 数据列表
     */
    void matchAttatchAndConfirmAndRuleItem(List<LimitRuleRespVO> limitList);

    /**
     * BCR/DCR规则匹配项配置接口
     *
     * @param usePeriod 规则适用阶段
     * @return 规则匹配项配置列表
     */
    List<RuleMatchItemCfgRespVO> getMatchItemConfiguration(String usePeriod);

}
